package com.itlz.oss.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.itlz.common.config.Constant;
import com.itlz.common.vo.ResultVo;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
@RestController
@Tag(name = "文件上传")
public class EduBannerController {

    @Value("${ali.endpoint}")
    private String endpoint;
    @Value("${ali.endpoint2}")
    private String endpoint2;
    @Value("${ali.bucketName}")
    private String bucketName;
    @Value("${ali.accessKeyId}")
    private String accessKeyId;
    @Value("${ali.secretAccessKey}")
    private String secretAccessKey;

    @PostMapping("/oss/{type}")
    public ResultVo upload(@PathVariable String type, MultipartFile file){
        if (file==null || file.isEmpty()){
            return ResultVo.error("文件必填");
        }
        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        SimpleDateFormat format=new SimpleDateFormat("yyyy/MM/dd");
        String dataPath = format.format(new Date());
        String fileName=dataPath+"/"+ UUID.randomUUID().toString().replace("-","")+suffix;
        StringBuffer objectName = new StringBuffer();
        switch (type){
            case Constant.UploadType.AVATAR:
            case Constant.UploadType.VIDEO:
            case Constant.UploadType.COVER:
                objectName.append(type).append("/");
                break;
            default:
                return ResultVo.error("参数错误");
        }
        objectName.append(fileName);
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,secretAccessKey);

        try {
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName.toString(), file.getInputStream());

            // 上传文件。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            String url="https://"+bucketName+"."+endpoint2+"/"+objectName;

            System.out.println(url);

            //拿到最终上传成功的url
            return ResultVo.success("",url);
        } catch (Exception e) {
            return ResultVo.error("上传阿里云失败");
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

}
